package com.tedu.day02.oop;

/**
 * 抽象类:抽象类与抽象方法  关键字：abstract
 * 类：只提供行为概念，没有具体实现行为
 *
 * 与面向对象--多态绝对关系
 * 使用多态创建抽象类对象，抽象类本身无法创建对象需要使用多态完成抽象类创建
 *
 * 什么是使用抽象类
 * 复杂项目时，需要在不同类下实现不同的功能，首先抽象类【Android常用】
 *
 * 定义抽象类与抽象方法？
 * 抽象类：修饰符 abstract class  类名{}   ---毫无意义，必须结合抽象方法
 * 抽象方法：修饰符   返回值  方法（参数）{}；没有具体的实现
 *
 * 抽象类"实例化：创建对象"：抽象类自身无法实现实例化
 * ①创建【N个】子类，继承抽象【父】类，子类一定实现【父】类所有抽象方法
 * ②使用面向对象：多态想上造型  抽象类  引用=new  【实现】子类（）
 * 注意：抽象类一定发生重写，子类继承【父】类，也可以叫做”实现类“
 */
abstract class Animals{//抽象类
    //抽象方法,没有具体的实现【代码块】---一定继承---一定多态性【造型】
    public abstract void say();
    //①定义一个由final修饰的抽象方法  ？  错误
    //public final abstract void sleep();
    //②定义一个抽象的变量?  错  不存在
    //abstract int i=1;
    //③定义一个静态的变量  ？ √  可以
   static int i=1;
   //④定义静态的抽象变量  ？  ×  不可以
    //static abstract int j=1;
    //⑤定义一个静态的抽象方法【不实现】? ×  静态和抽象2选1
    //public static abstract void eat();、
    //⑥定义静态的方法【无实现：空代码块】 √
    public static void eat(){}
    //⑤⑥总结：抽象方法/静态方法，方法定义：修饰符 static/abstract  返回值  方法名
    //⑦抽象类可以定义内部类：静态内部类？  √  可以
    static class Sos{}
    //⑧抽象类有构造器吗？    √

    public Animals() {
    }
    //⑨抽象类当中可以1存在一个普通的实现方法吗？ √
    public void run(){}
    //⑩抽象类可以继承抽象类吗？  实现：两个抽象类可以形容一个实现  √
    abstract class Thing extends Animals{
        public abstract void sleep();
    }
    //目的：两个抽象类中所有抽象方法--继承【子抽象类】
}
class Person1 extends Animals{

    public void say() {
        System.out.println("人---说话--");
    }
}
public class 抽象类 {
    public static void main(String[] args) {
        //抽象类无法实现类：只提供了抽象类方法--必须由子类实现
        Animals a=new Person1();
        a.say();//向上造型--重写抽象父类的抽象方法【覆盖】
    }
}
